Skip to content

S11-02 高级特性-JAR包 ​

[TOC]

JAR 包 ​

在 Java 开发中,JAR (Java ARchive) 包是一个非常核心的概念。简单来说,JAR 包就是一种将多个 Java 类文件、相关元数据和资源(如文本、图片等) 打包到一个文件中的压缩格式。

你可以把它理解为 Java 世界的 .zip 文件(事实上,它底层使用的正是 ZIP 压缩算法),但它比普通的压缩包多了一些特定的 Java 规范。

JAR 包的核心结构 ​

JAR 包的核心结构:

一个标准的 JAR 包解压后,通常包含以下内容:

  • .class 文件: Java 源代码(.java)编译后生成的字节码文件。这些文件会严格按照 Java 包名(Package)的目录结构进行组织(例如 com/example/MyClass.class)。
  • 资源文件: 程序运行所需的配置文件(如 .properties, .xml, .yaml)、图片、音频等。
  • META-INF 目录: 这是 JAR 包中最特殊的目录,用于存储包的元数据信息。
    • MANIFEST.MF: 清单文件。这是 META-INF 目录下最重要的文件。它包含了关于 JAR 包的键值对信息,例如版本号、创建者,以及最关键的入口类(Main-Class) 声明。

导入 JAR 包 ​

在 Java 开发中,“导入 JAR 包”通常包含两个层面的意思:第一步是将 JAR 包添加到项目的“类路径(Classpath)”中,让编译器和运行环境能找到它;第二步是在 Java 代码中使用 import 关键字引入 JAR 包里面的具体类。

对于现代 Java 开发来说,手动下载和导入 JAR 包的方式已经很少见了,大家基本都在使用构建工具(Maven 或 Gradle) 来自动管理。

手动导入 ​

如果你正在做一个简单的学习项目,没有使用 Maven 或 Gradle,你需要先将 JAR 包下载到本地电脑,然后手动告诉 IDE 在哪里找它。

IDEA@ ​
  1. 创建目录: 建议在项目根目录下新建一个名为 lib 的文件夹。

  2. 放入 JAR 包: 将下载好的 .jar 文件复制到这个 lib 文件夹中。

  3. 配置库: 右键点击这个 JAR 包(或整个 lib 文件夹)。

    • 在弹出的菜单中选择 "Add as Library..."(添加为库)。

    • 在弹出的确认框中点击 "OK"。

      此时,JAR 包旁边会出现一个小箭头,表示 IDEA 已经将其加入到类路径中,可以正常使用了。

Eclipse ​
  1. 在项目中创建一个 lib 文件夹,将 JAR 包复制进去。

  2. 右键点击项目名称,选择 "Build Path" -> "Configure Build Path..."。

  3. 在弹出的窗口中选择 "Libraries" 选项卡。

  4. 点击右侧的 "Add JARs..."(如果 JAR 包在项目内)或 "Add External JARs..."(如果 JAR 包在电脑的其他地方)。

  5. 选中你的 JAR 包,点击 "Apply and Close"。

自动导入(推荐) ​

这是目前企业级开发绝对的主流。你不需要手动下载 JAR 包,只需在配置文件中声明,工具会自动从中央仓库(如 Maven Central)下载并导入到项目中。

Maven ​

如果你的项目是 Maven 项目,打开根目录下的 pom.xml 文件,找到 <dependencies> 标签,将你需要的 JAR 包的坐标(依赖)粘贴进去。

例如,导入谷歌的 Guava 工具包:

xml
<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>32.1.3-jre</version>
    </dependency>
</dependencies>

保存文件后,IDEA 或 Eclipse 等编译器会自动刷新并下载该 JAR 包到本地缓存中。

Gradle ​

如果你的项目使用 Gradle,打开 build.gradle 文件,在 dependencies 代码块中添加依赖。

同样以导入 Guava 为例:

groovy
dependencies {
    // 引入 Guava 依赖
    implementation 'com.google.guava:guava:32.1.3-jre'
}

保存后,点击 IDE 中的 Gradle 刷新按钮即可。

命令行工具 ​

使用 JDK 自带的 jar 命令行工具:

JDK 提供了一个名为 jar 的命令行工具。常用的命令如下:

  • 创建 JAR 包: jar cvf myapp.jar *.class (c=create, v=verbose, f=file)
  • 查看 JAR 包内容: jar tf myapp.jar (t=table of contents)
  • 解压 JAR 包: jar xvf myapp.jar (x=extract)
  • 创建可执行 JAR 包(指定入口点): jar cfe myapp.jar com.example.Main *.class (e=entry point)

JAR 包的主要分类 ​

JAR 包的主要分类:

根据用途,JAR 包通常可以分为两类:

依赖库/类库 ​

这是最常见的 JAR 包类型。它是一组封装好的类和方法的集合,供其他程序调用。

  • 特点: 没有程序的运行入口(即 MANIFEST.MF 中没有指定 Main-Class)。

  • 例子: 常用的第三方开源库,如 Guava.jar, Gson.jar, 或者各种 JDBC 驱动包。

  • 用法: 运行程序时,通过类路径(Classpath)引入:

    bash
    java -cp ".;lib/Gson.jar" com.example.MyProgram

可执行程序 ​

这种 JAR 包本身就是一个完整的应用程序,可以直接运行。

  • 特点: 在 META-INF/MANIFEST.MF 文件中,必须包含 Main-Class: 完整的包名.类名 这一行,告诉 JVM 从哪个类的 main 方法开始执行。

  • 例子: 使用 Spring Boot 打包出来的 Web 应用通常就是一个可执行的 "Fat JAR"(包含所有依赖的胖 JAR 包)。

  • 用法: 直接使用 java -jar 命令运行:

    bash
    java -jar my-application.jar

为什么要使用 JAR 包 ​

为什么要使用 JAR 包:

  • 压缩与减小体积: 因为采用了 ZIP 算法,打包后的体积比散落的 .class 文件小很多,便于网络传输。
  • 方便部署与分发: 将成百上千个类文件和资源文件打包成一个独立的 .jar 文件,交付给客户或部署到服务器上时极其方便。
  • 安全性: 可以对 JAR 包的内容进行数字签名(Digital Signature),确保代码来源的可靠性且未被篡改。
  • 版本控制: 通过在包名或 MANIFEST.MF 中标注版本号,可以很好地管理软件的更新迭代。